home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / mdns.nasl < prev    next >
Text File  |  2005-01-14  |  4KB  |  162 lines

  1. #
  2. # (C) Tenable Network Security
  3. #
  4. if(description) {
  5.  script_id(12218);
  6.  script_version("$Revision: 1.5 $");
  7.  
  8.  name["english"] = "mDNS Detection";
  9.  script_name(english:name["english"]);
  10.  
  11.  desc["english"] ="
  12. The remote host is running RendezVous (also known as ZeroConf or mDNS).
  13. This service allows users on the network to enumerate information about the
  14. remote host, such as the list of services it is running, its host name and
  15. more.
  16.  
  17. An attacker may use this information to perform a more accurate attack.
  18.  
  19. Solution : filter incoming traffic to UDP port 5353
  20. Risk factor : Low";
  21.  
  22.  script_description(english:desc["english"]);
  23.  
  24.  summary["english"] = "mDNS detection";
  25.  script_summary(english:summary["english"]);
  26.  
  27.  script_category(ACT_GATHER_INFO);
  28.  
  29.  script_copyright(english:"This script is Copyright (C) 2004 Tenable Network Security");
  30.  family["english"] = "General";
  31.  script_family(english:family["english"]);
  32.  exit(0);
  33. }
  34.  
  35. #
  36. # The script code starts here
  37. #
  38.  
  39.  
  40. port = 5353;
  41. if(!get_udp_port_state(port))exit(0);
  42.  
  43. seen_mdns = 0;
  44.  
  45. # Many Windows-PC have iTunes installed, so we attempt to detect it
  46. domain[0] = string("_daap");      dsz[0] = strlen(domain[0]);
  47. domain[1] = string("_tcp");   dsz[1] = strlen(domain[1]);
  48. domain[2] = string("local");      dsz[2] = strlen(domain[2]);
  49.  
  50. req = raw_string(
  51. 0x00,0x4a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00);
  52. for (t=0; domain[t]; t++) req = req + raw_string(dsz[t]) + domain[t];
  53. req += raw_string(0x00,0x00,0x0c,0x00,0x01);
  54.  
  55. soc = open_sock_udp(port);
  56. send(socket:soc, data:req);
  57. r = recv(socket:soc, length:4096, timeout:2);
  58. if ( r ) seen_mdns ++;
  59.  
  60.  
  61.  
  62. # MacOS only
  63. domain[0] = string("_workstation");      dsz[0] = strlen(domain[0]);
  64. domain[1] = string("_tcp");   dsz[1] = strlen(domain[1]);
  65. domain[2] = string("local");      dsz[2] = strlen(domain[2]);
  66.  
  67.  
  68.  
  69. # Step[0] let's try to insert this value into the cache 
  70. req = raw_string(
  71. 0x00,0x4a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00);
  72. for (t=0; domain[t]; t++) req = req + raw_string(dsz[t]) + domain[t];
  73. req += raw_string(0x00,0x00,0x0c,0x00,0x01);
  74.  
  75. send(socket:soc, data:req);
  76. r = recv(socket:soc, length:4096, timeout:3);
  77. if ( r ) answers = (ord(r[6]) * 256) + ord(r[7]);
  78. if ( ! r || answers == 0 ){ 
  79.  if ( seen_mdns )
  80.  {
  81.   security_note(port:port,
  82.           proto:"udp",
  83.           data:
  84. "The remote host is running RendezVous (also known as mDNS or ZeroConf). 
  85. Although it is not possible to extract information about the remote host,
  86. you should disable this service if you do not use it.
  87.  
  88. Risk factor : Low");
  89.           
  90.  }
  91.  exit(0);
  92. }
  93.  
  94. len = ord(r[51]) * 256 + ord(r[52]);
  95. full_name = substr(r, 53, 53 + len - 3);
  96. ethernet = ereg_replace(pattern:".*\[(.*)\]", string:full_name, replace:"\1");
  97.  
  98. offset = 53 + len + 10;
  99. len = ord(r[offset]) * 256 + ord(r[offset+1]);
  100.  
  101. name = substr(r, offset + 8 + 1, offset + len - 1);
  102.  
  103. set_kb_item(name:"mDNS/name", value:name);
  104. set_kb_item(name:"mDNS/ethernet", value:ethernet);
  105.  
  106.  
  107. # Now, query the host info
  108.  
  109. domain[0] = name;      dsz[0] = strlen(domain[0]);
  110. domain[1] = string("local");   dsz[1] = strlen(domain[1]);
  111. domain[2] = NULL;
  112.  
  113.  
  114. req = raw_string(
  115. 0x00,0x4A,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00);
  116. for (t=0; domain[t]; t++) req = req + raw_string(dsz[t]) + domain[t];
  117. req += raw_string(0x00,0x00,0x0d,0x00,0x01);
  118.  
  119. send(socket:soc, data:req);
  120. r = recv(socket:soc, length:4096);
  121. answers = (ord(r[6]) * 256) + ord(r[7]);
  122. close(soc);
  123. if ( answers == 0 )  exit(0); 
  124.  
  125. len = ord(r[12]);
  126.  
  127. offset = 13 + len + 23;
  128. cpu_len = ord(r[offset]);
  129. cpu_type = substr(r, offset + 1, offset + cpu_len);
  130. set_kb_item(name:"mDNS/cpu", value:cpu_type);
  131.  
  132. offset += cpu_len + 1;
  133. os = substr(r, offset + 1, offset + ord(r[offset]));
  134. p = strstr(os, " (");
  135. if ( p ) os -= p;
  136.  
  137. set_kb_item(name:"mDNS/os", value:os);
  138.  
  139.  
  140. security_note(proto:"udp",
  141. port:port, 
  142. data:"
  143. The remote host is running the RendezVous (also known as ZeroConf or mDNS)
  144. protocol.
  145.  
  146. This protocol allows anyone to dig information from the remote host, such
  147. as its operating system type and exact version, its hostname, and the list
  148. of services it is running.
  149.  
  150. We could extract the following information :
  151.  
  152. Computer name    : " + name + "
  153. Ethernet addr    : " + ethernet + "
  154. Computer Type    : " + cpu_type + "
  155. Operating System : " + os + "
  156.  
  157. Solution : You should filter incoming traffic to this port if you do not use 
  158. this protocol.
  159.  
  160. Risk factor : Low");
  161.  
  162.